The present application relates generally to an improved data processing apparatus and method and more specifically to interfaces for assigning tasks in a multi-core, multi-threaded processor system to take advantage of processing resources available in partially failed and partially functional processor cores.
Modern data processing or computer systems typically include a plurality of processor cores. In some modern data processing systems, each processor core is multithreaded where multiple hardware-supported threads can be executed in parallel within the processor core. The number of threads depends on the design of the processor core and usually presents a tradeoff between efficient utilization of processor core resources on one hand, and the requirements on the pipeline, cache size, and memory bandwidth on the other hand.
In such computer systems, operating system software can assign instructions from application tasks to the various hardware threads or processing resources available. Depending on the workload, the user or system administrator can also instruct the operating system to use only a specific number of hardware threads within a particular processor core to run particular application tasks, leaving the remaining hardware threads idle. However, available processing resources are determined based on the identification of processor cores as “good” or “bad/failed,” with bad or failed processor cores not receiving any instructions. Energy consumption is another important consideration, and even failed processor cores consume power and generate heat. Even if the clocks are turned off, failed processor cores consume leakage current and thus generate heat. In processors that provide dynamic voltage and frequency scaling (DVFS), the selection of the frequency of each processor core enables the user to fine-tune the tradeoff between performance and energy consumption. This may relieve some of the additional power consumption caused by malfunctioning cores if the DVFS system is functioning properly for that core, but the malfunctioning core's code execution capabilities are lost under current schemes.
In many cases, bad or failed cores still have processing resources that could be used. This depends on the nature of the failure, but since each core includes a plurality of execution units and other components, failure of one or more units that can label the core as bad or failed does not mean that all execution units have failed. Thus, processing resources that could be used wind up wasting power and heating up the computer system. The problem is how to schedule application tasks on the available processor cores, even partially functional cores, so as to better balance performance and energy consumption.